def solution(n, A, B, array_a):
    # Please write your code here
    # 定义取余的模数
    mod = 10000007
    # 初始化动态规划数组，dp[a][b]表示一组数字和的个位数为a，另一组数字和的个位数为b的划分方式数量
    dp = [[0] * 10 for _ in range(10)]
    # 初始状态，两组数字和都为0时有一种划分方式
    dp[0][0] = 1
    # 遍历输入数组中的每个数字
    for num in array_a:
        # 创建新的动态规划数组，用于存储更新后的状态
        new_dp = [[0] * 10 for _ in range(10)]
        for a in range(10):
            for b in range(10):
                # 将当前数字加到第一组，更新新状态下的划分方式数量
                new_dp[(a + num) % 10][b] = (new_dp[(a + num) % 10][b] + dp[a][b]) % mod
                # 将当前数字加到第二组，更新新状态下的划分方式数量
                new_dp[a][(b + num) % 10] = (new_dp[a][(b + num) % 10] + dp[a][b]) % mod
        # 更新动态规划数组为新的状态
        dp = new_dp
    # 返回个位数为A和B的划分方式数量
    return dp[A][B]


if __name__ == "__main__":
    #  You can add more test cases here
    print(solution(3, 1, 2, [1, 1, 1]) == 3)
    print(solution(3, 3, 0, [1, 1, 1]) == 1)
    print(solution(2, 1, 1, [1, 1]) == 2)
